var express = require('express')
var router = express.Router()
var articles = require('./../models/article')
var clubs = require('./../models/club')
var multer = require('multer')
let fs = require('fs')
let path = require('path')
let moment = require('moment')
// const { planLists } = require('./planLists')
// var Collections = require('./../models/collection')

// 读取文章详情
router.post('/detail', function (req, res, next) {
	let { id } = req.body

	articles.find({ id }, function (err0, doc0) {
		if (err0) {
			res.json({
				code: '201',
				data: null,
				message: err0,
				code:500,
			})
			return false
		}
		res.json({
			code: '200',
			data: doc0[0] || {},
			message: '成功',
			success: true,
		})
	})
})
// 删除文章
router.post('/delete', function (req, res, next) {
	let id = req.body.id
	console.log(id)
	articles.remove({ id: id }, function (err, doc) {
		if (err) {
			res.json({
				code: '201',
				data: null,
				message: err,
				code:500,
			})
		} else {
			res.json({
				code: '200',
				data: null,
				message: '删除成功',
				success: true,
			})
		}
	})
})

// 修改文章
router.post('/edit', function (req, res, next) {
	var param = {
		userName: req.body.data.userName,
	}
	let id = req.body.data.id
	let types = req.body.data.types
	articles.findOne(param, function (err, doc) {
		doc.article[types].forEach((item, index) => {
			if (item.id == id) {
				doc.article[types].splice(index, 1)

				doc.save(function (err1, doc1) {
					if (err1) {
						res.json({
							status: '1',
							msg: '删除失败' + err1,
						})
					} else {
						res.json({
							status: '0',
							msg: '删除成功',
						})
					}
				})
			}
		})
	})
})

// 读取文章列表--【前台】
router.post('/articleList', function (req, res, next) {
	/**
	 *  parentId //用来查一级分类
	 *  secondIdList //用来查二级分类
	 *  id  //用来查单独一篇文章
	 */
	let { id, secondIdList, parentId, pageSize, pageNum } = req.body
	const where = {
		parentId: parentId,
		secondId: { $in: secondIdList }, //要查结果是否在条件数组中，使用$in
		id: id,
	}
	for (let item in where) {
		if (!where[item]) {
			delete where[item]
		}
	}
	// 去掉的条件是去掉空数组的，数组要单独删除
	if (!secondIdList || (secondIdList && secondIdList.length == 0)) {
		delete where['secondId']
	}
	console.log(where)
	// 先获取总条数
	articles.countDocuments(where, function (err, count) {
		if (err) {
			res.json({
				code: '201',
				data: null,
				message: err,
				code:500,
			})
			return false
		}

		// 再获取分页数据
		articles
			.find(where)
			.skip((pageNum - 1) * parseInt(pageSize))
			.limit(parseInt(pageSize))
			.exec(function (err1, doc1) {
				if (err1) {
					res.json({
						code: '201',
						data: null,
						message: err1,
						code:500,
					})
				} else {
					res.json({
						code: '200',
						data: {
							data: doc1 || [],
							total: count,
						},
						message: '成功',
						success: true,
					})
				}
			})
	})
})

//继续阅读
router.post('/keepList', function (req, res, next) {
	let { parentId, secondId, id } = req.body
	//  全匹配查询，查询满足parentId和secondId，但是不满足id的数据
	const where = {
		parentId,
		secondId,
		id: { $ne: id },
	}
	articles.find(where, function (err0, doc0) {
		if (err0) {
			res.json({
				code: '201',
				data: null,
				message: err0,
				code:500,
			})
		} else {
			res.json({
				code: '200',
				data: doc0,
				message: '成功',
				success: true,
			})
		}
	})
})

// 随机文章
router.post('/radomArticle', function (req, res, next) {
	articles.find(function (err0, doc0) {
		if (err0) {
			res.json({
				code: '201',
				data: null,
				message: err0,
				code:500,
			})
		} else {
			// 文章超过5篇才需要显示随机文章,并且 不能重复
			let randomArry = []
			for (let i = 0; i < 5; i++) {
				let len = doc0.length
				let ran = Math.floor(Math.random() * len)
				randomArry.push(doc0[ran])
				doc0.splice(ran, 1)
			}
			res.json({
				code: '200',
				data: randomArry,
				message: '成功',
				success: true,
			})
		}
	})
})

//上一篇，下一篇
router.post('/nextPreList', function (req, res, next) {
	let { id } = req.body
	articles.find(function (err0, doc0) {
		if (err0) {
			res.json({
				code: '201',
				data: null,
				message: err0,
				code:500,
			})
		} else {
			doc0.forEach((item, index) => {
				if (item.id == id) {
					// 拿到当前文章的index,再获取上一篇，下一篇文章的位置
					res.json({
						code: '200',
						data: {
							pre: doc0[index - 1],
							next: doc0[index + 1],
						},
						message: '成功',
						success: true,
					})
				}
			})
		}
	})
})

// 搜素文章，返回列表
router.post('/search', function (req, res, next) {
	let { value } = req.body
	// 模糊查询
	const where = {
		$or: [{ title: { $regex: value, $options: '$i' } }],
	}
	articles.find(where, function (err0, doc0) {
		if (err0) {
			res.json({
				code: '201',
				data: null,
				message: err0,
				code:500,
			})
			return false
		}
		res.json({
			code: '200',
			data: doc0,
			message: '成功',
			success: true,
		})
	})
})

// 读取文章列表--【后台台】
router.post('/articleListBack', function (req, res, next) {
	// let pageSize = req.param("pageSize")
	// let pageNum = req.param("pageNum")
	// let Collect = { userName: req.param("userName") }
	// let skip = (pageNum - 1) * pageSize //从哪一条开始查询
	// let totol; //总条数

	/**
	 *name: '', //名称
	 *id: null, //id
	 *typesList: [],  //类型列表
	 *
	 */
	let { id, title, typesList, pageSize, pageNum } = req.body

	//同时查询title、id、types，id严格匹配，title模糊匹配，types存在于数组typesList中的文章
	const where = {
		$or: [{ title: { $regex: title, $options: '$i' } }],
		id: id,
		types: { $in: typesList }, //要查结果是否在条件数组中，使用$in
	}
	// 处理传空的项目，传空的话，就不要输入该项的查询条件，直接删除此项,保证传空也可以查询全部

	for (let item in where) {
		if (!where[item]) {
			delete where[item]
		}
	}
	// 去掉的条件是去掉空数组的，数组要单独删除
	if (typesList && typesList.length == 0) {
		delete where['types']
	}
	// 先获取总条数
	articles.countDocuments(where, function (err, count) {
		if (err) {
			res.json({
				code: '201',
				data: null,
				message: err,
				code:500,
			})
			return false
		}

		// 再获取分页数据
		articles
			.find(where)
			.skip((pageNum - 1) * parseInt(pageSize))
			.limit(parseInt(pageSize))
			.exec(function (err1, doc1) {
				if (err1) {
					res.json({
						code: '201',
						data: null,
						message: err1,
						code:500,
					})
				} else {
					//注意 传入分类数组的话，还需要对结果进行过滤
					// let typeArry = []

					// if (typesList && typesList.length > 0) {
					// 	typesList.forEach((item, index) => {
					// 		doc1.filter(
					// 			(item1, index1) => item1.types == item
					// 		)[0] &&
					// 			typeArry.push(
					// 				doc1.filter(
					// 					(item1, index1) => item1.types == item
					// 				)[0]
					// 			)
					// 	})
					// } else {
					// 	typeArry = doc1
					// }

					res.json({
						code: '200',
						data: {
							data: doc1 || [],
							total: count,
						},
						message: '成功',
						success: true,
					})
				}
			})
	})
})
// 新建文章--【后台】
router.post('/postAricle', function (req, res, next) {
	/**
	 * 使用：
	 *  title: '', //名称
	 *	tag: null, //标签
	 *	typesList: [], //分类
	 *  markdown: '', //文章内容
	 */
	let { title, tag, types, typesList, content, id } = req.body
	let articleObj = req.body
	// 有id为修改，没有id为新增
	//  注意 =====【find查询来的数组是没有save方法的，但是数组项是有save方法的】
	articles.find(function (err0, doc0) {
		if (doc0 == '' || doc0 == null) {
			/*逻辑【1】 新建集合
			 **  整理数据
			 **  第一篇文章设置id为1
			 */
			articleObj.parentId = typesList[0]
			articleObj.secondId = typesList[1]
			articleObj.id = 1
			articleObj.times = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
			articleObj.autor = '子树'
			articleObj.Pageview = 0
			articleObj.coverImage =
				'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3156590071,3197389731&fm=26&gp=0.jpg'
			articleObj.sort = 1
			// 插入数据
			articles.create([articleObj], function (err1, doc1) {
				if (err1) {
					res.json({
						code: '201',
						data: null,
						message: err1,
						success: true,
					})
				} else {
					res.json({
						code: '200',
						data: 1,
						message: '成功',
						success: true,
					})
				}
			})
		} else {
			/*逻辑【2】 修改数据
			 **  如果传了id，那么就修改集合中的原文章
			 */
			if (id) {
				for (let i = 0; i < doc0.length; i++) {
					if (doc0[i].id == id) {
						//  注意 =====【find查询来的数组是没有save方法的，但是数组项是有save方法的】
						doc0[i] = Object.assign(doc0[i], articleObj)
						doc0[i].save(function (err2, doc2) {
							if (err2) {
								res.json({
									code: '201',
									data: null,
									message: err2,
									success: true,
								})
							} else {
								res.json({
									code: '200',
									data: id,
									message: '修改成功',
									success: true,
								})
							}
						})
						return false
					}
				}
			} else {
				/*逻辑【3】 新增数据
				 **  如果没有传id,那么就添加文章
				 */
				// 新文章加id
				articleObj.id = doc0[doc0.length - 1].id + 1
				articleObj.parentId = typesList[0]
				articleObj.secondId = typesList[1]
				articleObj.times = moment(new Date()).format(
					'YYYY-MM-DD HH:mm:ss'
				)
				articleObj.autor = '子树'
				articleObj.Pageview = 0
				articleObj.coverImage =
					'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3156590071,3197389731&fm=26&gp=0.jpg'
				articleObj.sort = 1
				//  注意 =====【find查询来的数组是没有save方法的，但是数组项是有save方法的，另外也可以直接new 一个modal出来使用它的save】
				let data = new articles(articleObj)
				data.save(function (err3, doc3) {
					if (err3) {
						res.json({
							code: '201',
							data: null,
							message: err3,
							success: true,
						})
					} else {
						res.json({
							code: '200',
							data: articleObj.id,
							message: '新增成功',
							success: true,
						})
					}
				})
			}
		}
	})
})

module.exports = router
